草庐IT

javascript oop、instanceof 和基类

全部标签

java - 我应该针对接口(interface)还是抽象基类编程?这句话到底是什么意思?

在面向对象的编程中,我读到你应该针对接口(interface)而不是实现进行编程,但它们是否意味着文字接口(interface)(根本没有共享代码)?除了这个“接口(interface)”中有所有子类都应该有的变量之外,是否可以对一个本应是接口(interface)的抽象基类进行编程?跨子类复制变量会带来不便,因为如果我更改其中一个子类中的一个变量的名称,我将不得不更改所有子类中该变量的名称。遵循“针对接口(interface)而不是实现编程”的原则,这样可以吗,或者您会在抽象基类之上创建另一个接口(interface)并针对该接口(interface)编程吗?

c++ - reinterpret_cast 指向基类的指针的 vector 的 vector

考虑以下代码#include#include#include#includestructBase{intx;Base(intx):x(x){}};structDerived:publicBase{inty,z;Derived(intx):Base(x),y(x+1),z(x+2){}};voidupdate(conststd::vector>&elements){for(constautoelem:elements){std::coutx>elements(4);{intctr=0;std::generate(begin(elements),end(elements),[&ctr]()

c++ - 继承函数返回派生类,而不是基类

在C++中是否可以在Base类中制定返回Base类型的函数,以便在Derived类中,它们返回Derived类型,而不重载?最小的例子:classBase{public:Base(doublev){value=v;}Baseadd(Baseb){returnBase(b.value+this->value);}voidprint(){std::cout动机在实际例子中,Base代表一个线性代数矩阵,Derived代表一个vector。矩阵提供了许多适用于vector的函数,例如标量的加法或乘法。在这种情况下,最好不必手动覆盖所有这些矩阵函数来返回vector。如果可能的话,我想表达无论

c++ - 基类的派生类充当抽象类

我定义了一个父类(superclass)元素。有一些element的派生类,比如triangle,quad和cube。一些element对象是边界元素。如果element是边界元素,那么我必须定义额外的数据成员和函数。如果element类不是基类,我可以很容易地派生一个boundary_element类。(我的意思是,如果triangle,quad和cube是单独的类我可以定义单独的派生类,如boundary_triangle、boundary_quad和boundary_cube).所以我的问题是我必须定义一个子类boundary_element,它必须是定义派生类boundary_

c++ - 虚拟基类的创建顺序

我有以下问题:structA1{A1(){std::cout当您运行这段代码时,答案是:A1A2A1AA2A2AA1B我想了解第一个A1是在哪里创建的。我知道虚拟类在非虚拟类之前调用​​的规则,但第一个A1是困扰我的问题。 最佳答案 第一个A1来自B的(非虚拟)基AA1的(虚拟)基的初始化。首先初始化B的所有虚基,依次为A1、A2和AA2。(AA2的初始化导致输出A1AA2。)然后是直接基,其中只有一个,AA1(其初始化打印A2AA1),最后是类本身,打印B。首先是所有虚拟基地,然后才是剩余的非虚拟基地。

c++ - 以不止一种方式向上转换为作为基类的 C++ 类(无需使用虚拟继承)

classA{};classB:publicA{};classC:publicA,publicB{};intmain(){Cc;A*pA=static_cast(&c);}在上面的代码中,类C是从类A派生而来的,有两种不同的路径:1.直接来自A2.间接通过B即A因此,当我将类C的对象转换为指向类A的指针时,Linux上的g++会报告以下错误:错误:A是C的不明确基数我也通过删除静态转换来尝试相同的代码,如下所示:A*pA=&c;但是,我仍然得到完全相同的错误。有什么解决办法吗?顺便说一句,在使用VisualC++编译器的Windows上同样可以正常工作而不会出错。我知道虚拟继承可以解决

c++ - 如何通过派生类访问基类的 protected 成员?

这个问题在这里已经有了答案:Accessingprotectedmembersinaderivedclass(8个答案)关闭3年前。我正在尝试几个关于继承的程序,结果是以下导致了错误,但我真的不知道原因。#includeusingnamespacestd;classBase{protected:intx=0;};classDerived:publicBase{//OK:accessprotectedmemberviathisvoidg(){cout我希望派生类可以访问基类的公共(public)或protected数据成员和成员函数。然而它并没有像我想的那样起作用,谁能帮我阐明我的概念?

c++ - 基类中的唯一指针禁止实例化,错误为 "attempting to reference a deleted function"

我将我的C++工具链从VisualStudio2013更新到VisualStudio2017/2019。现在我遇到了一些形式的编译错误:(13):errorC2280:'OfflineFixture::OfflineFixture(constOfflineFixture&)':attemptingtoreferenceadeletedfunction(8):note:compilerhasgenerated'OfflineFixture::OfflineFixture'here(8):note:'OfflineFixture::OfflineFixture(constOfflineFi

c++ - 为特定类型的所有应用程序创建一个基类是好的设计吗?

我正在尝试用C++编写图形应用程序。它目前使用OGRE进行显示,但我希望它可以与Irrlicht或任何其他引擎一起使用,甚至是支持我的需求的自定义渲染引擎。这是一个相当长的问题,所以我很感激帮助重新标记/清理(如有必要)。我将从一些背景开始。应用程序主要有3个状态:1.显示光栅化场景2.显示同一场景的光线追踪版本3.显示混合版本的场景显然,我可以将我的应用程序分为四个主要部分:1.一个状态管理系统,可以在以上模式之间切换。2.一个可以接受键盘和鼠标输入的输入系统。3.用于显示的光栅引擎。4.光线追踪系统。包含上述内容的任何应用程序都需要能够:1.创建一个窗口。2.执行允许在该窗口中呈现

c++ - 调用基类构造函数

在下面的程序中,是行Derived(doubley):Base(),y_(y)正确/允许?也就是说,它是否遵循ANSI规则?#includeclassBase{public:Base():x_(0){std::cout 最佳答案 这是允许的,但没有意义,因为编译器会为您进行调用。不过,恐怕我今天早上不想做标准拖网。 关于c++-调用基类构造函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques